//#include "notSword_offer/189.h"
#include "Sword/35.h"
#include "stdlib.h"
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {

  // 测试重构二叉树；
  //  vector<int> a = {3, 9, 20};
  //  vector<int> b = {9, 3, 20};
  //  Solution m;
  //  ListNode a(1), b(2), c(4), d(1), e(3), f(4);
  //  auto k = m.buildTree(a, b);
  //  cout << k->val << endl;
  //  cout << k->right->val << endl;
  //  cout << k->left->val << endl;

  Solution k;
  Node *a7 = new Node(7);
  Node *a13 = new Node(13);
  Node *a11 = new Node(11);
  Node *a10 = new Node(10);
  Node *a1 = new Node(1);
  a7->next = a13;
  a13->next = a11;
  a11->next = a10;
  a10->next = a1;
  a13->random = a7;
  a11->random = a1;
  a10->random = a11;
  a1->random = a7;
  k.copyRandomList(a7);
  //  vector<int> test = {1, 2, 5, 10, 6, 9, 4, 3};
  //  k.verifyPostorder(test);
  //  k.isMatch("mississippi", "mis*is*ip*.");

  //  vector<vector<char>> board = {
  //      {'A', 'B', 'C', 'E'}, {'S', 'F', 'E', 'S'}, {'A', 'D', 'E', 'E'}};
  //  string word = "ABCESEEEFS";
  //  cout << k.exist(board, word) << endl;

  //  cout << 20 % 3 << endl;
  //  int i = -2147483648;
  //  int j = -i;
  //  cout << j << endl;
  //  vector<int> k = {1, 2, 3, 4, 5, 6, 7};
  //  int n = 1;
  //  m.rotate(k, n);
  //  a.next = &b;
  //  b.next = &c;
  //  d.next = &e;
  //  e.next = &f;
  //  m.mergeTwoLists(&a, &d);

  //  int *a = nullptr;
  //  int *b = nullptr;
  //  cout << (a == b) << endl;
  //  vector<vector<int>> mm = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  //  vector<vector<int>> mm = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  //  vector<vector<int>> mm = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
  //                            {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}};
  //  for (auto i : m.spiralOrder(mm)) {
  //    cout << i << ' ';
  //  }
  //  cout << endl;

  //  MinStack *minStack = new MinStack();
  //  minStack->push(-2);
  //  minStack->push(0);
  //  minStack->push(-3);
  //  cout << minStack->min() << endl;
  //  minStack->pop();
  //  cout << minStack->top() << endl;
  //  cout << minStack->min() << endl;

  //  vector<int> arr = {14, 15, 16, 22, 53, 60};
  //  cout << k.twoSum(arr, 40) << endl;
  //  for (auto i : k.twoSum(arr, 76)) {
  //    cout << i << ' ';
  //  }
  //  cout << endl;
  //  cout << k.maxSubArray(arr) << endl;
  //  k.findContinuousSequence(9);
  //  k.reverseWords(" ");
  //  string s = "1234";
  //  cout << k.reverseLeftWords(s, 1) << endl;
  //  vector<int> nums = {1, 3, -1, -3, 5, 3, 6, 7};
  //  k.maxSlidingWindow(nums, 3);
  //  vector<int> nums = {7, 2, 4};
  //  k.maxSlidingWindow(nums, 2);
  //  int n = 3;
  //  for (double i : k.twoSum(n)) {
  //    cout << i << ' ';
  //  }
  //  cout << endl;
  //  vector<int> temp = {1, 2, 3, 4, 5};
  //  k.constructArr(temp);
  //  TreeNode n3(3);
  //  TreeNode n5(5);
  //  TreeNode n6(6);
  //  TreeNode n2(2);
  //  TreeNode n0(0);
  //  TreeNode n8(8);
  //  TreeNode n1(1);
  //  TreeNode n7(7);
  //  TreeNode n4(4);
  //  n3.left = &n5;
  //  n3.right = &n1;
  //  n5.left = &n6;
  //  n5.right = &n2;
  //  n2.right = &n4;
  //  n2.left = &n7;
  //  n1.left = &n0;
  //  n1.right = &n8;
  //  k.lowestCommonAncestor(&n3, &n5, &n1);
  //  char m[200] = {0};
  //  std::cin >> m;
  //  gets(m);
  //  std::cout << m << std::endl;
  //  k.cuttingRope(10);
  //  string m = "1";
  //  cout << m[1] << endl;

  //  char a0 = '0';
  //  char a1 = '1';
  //  std::cout << a1 - a0 << std::endl;
}
